<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>rapidjson: D:/rapidjson_version0.1x/include/rapidjson/document.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">rapidjson
   </div>
   <div id="projectbrief">A fast JSON parser/generator for C++ with both SAX/DOM style API</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
    </ul>
  </div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Pages</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_32fb88e4d38e67d524aa70efbc36f66b.html">rapidjson</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="headertitle">
<div class="title">document.h</div>  </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_DOCUMENT_H_</span></div>
<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define RAPIDJSON_DOCUMENT_H_</span></div>
<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="preprocessor">#include &quot;reader.h&quot;</span></div>
<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="preprocessor">#include &quot;internal/strfunc.h&quot;</span></div>
<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;</div>
<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="preprocessor">#ifdef _MSC_VER</span></div>
<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#pragma warning(push)</span></div>
<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#pragma warning(disable : 4127) // conditional expression is constant</span></div>
<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="keyword">namespace </span>rapidjson {</div>
<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div>
<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"></span><span class="comment">// GenericValue</span></div>
<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment">//! Represents a JSON value. Use Value for UTF8 encoding and default allocator.</span></div>
<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div>
<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment">        A JSON value can be one of 7 types. This class is a variant type supporting</span></div>
<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment">        these types.</span></div>
<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment">        Use the Value if UTF8 and default allocator</span></div>
<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment">        \tparam Encoding        Encoding of the value. (Even non-string values need to have the same encoding in a document)</span></div>
<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="comment">        \tparam Allocator       Allocator type for allocating memory of object, array and string.</span></div>
<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="comment">*/</span></div>
<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#pragma pack (push, 4)</span></div>
<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor"></span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator = MemoryPoolAllocator&lt;&gt; &gt; </div>
<div class="line"><a name="l00029"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html">   29</a></span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a> {</div>
<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="keyword">public</span>:<span class="comment"></span></div>
<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment">        //! Name-value pair in an object.</span></div>
<div class="line"><a name="l00032"></a><span class="lineno"><a class="code" href="structrapidjson_1_1_generic_value_1_1_member.html">   32</a></span>&#160;<span class="comment"></span>        <span class="keyword">struct </span><a class="code" href="structrapidjson_1_1_generic_value_1_1_member.html" title="Name-value pair in an object.">Member</a> { </div>
<div class="line"><a name="l00033"></a><span class="lineno"><a class="code" href="structrapidjson_1_1_generic_value_1_1_member.html#a5cfe65e60d1a83905e822636aae6b046">   33</a></span>&#160;                <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue&lt;Encoding, Allocator&gt;</a> <a class="code" href="structrapidjson_1_1_generic_value_1_1_member.html#a5cfe65e60d1a83905e822636aae6b046" title="name of member (must be a string)">name</a>;         <span class="comment">//!&lt; name of member (must be a string)</span></div>
<div class="line"><a name="l00034"></a><span class="lineno"><a class="code" href="structrapidjson_1_1_generic_value_1_1_member.html#ad723422bbaf63b14ba8109d4c8a55a5b">   34</a></span>&#160;<span class="comment"></span>                <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue&lt;Encoding, Allocator&gt;</a> <a class="code" href="structrapidjson_1_1_generic_value_1_1_member.html#ad723422bbaf63b14ba8109d4c8a55a5b" title="value of member.">value</a>;        <span class="comment">//!&lt; value of member.</span></div>
<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment"></span>        };</div>
<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;</div>
<div class="line"><a name="l00037"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#a05906384808645a2e798d29a9b2d441d">   37</a></span>&#160;        <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_encoding.html" title="Concept for encoding of Unicode characters.">Encoding</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a05906384808645a2e798d29a9b2d441d" title="Encoding type from template parameter.">EncodingType</a>;                                  <span class="comment">//!&lt; Encoding type from template parameter.</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#a5d47340c96346c5028fee4c9068d783d">   38</a></span>&#160;<span class="comment"></span>        <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_allocator.html" title="Concept for allocating, resizing and freeing memory block.">Allocator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a5d47340c96346c5028fee4c9068d783d" title="Allocator type from template parameter.">AllocatorType</a>;                                <span class="comment">//!&lt; Allocator type from template parameter.</span></div>
<div class="line"><a name="l00039"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4">   39</a></span>&#160;<span class="comment"></span>        <span class="keyword">typedef</span> <span class="keyword">typename</span> Encoding::Ch <a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>;                               <span class="comment">//!&lt; Character type derived from Encoding.</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#acb76e48067e6a79e78457544bdb74e2f">   40</a></span>&#160;<span class="comment"></span>        <span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_value_1_1_member.html" title="Name-value pair in an object.">Member</a>* <a class="code" href="classrapidjson_1_1_generic_value.html#acb76e48067e6a79e78457544bdb74e2f" title="Member iterator for iterating in object.">MemberIterator</a>;                                 <span class="comment">//!&lt; Member iterator for iterating in object.</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#a3993e2966ea85fb8555fbb9ef92b9a0a">   41</a></span>&#160;<span class="comment"></span>        <span class="keyword">typedef</span> <span class="keyword">const</span> <a class="code" href="structrapidjson_1_1_generic_value_1_1_member.html" title="Name-value pair in an object.">Member</a>* <a class="code" href="classrapidjson_1_1_generic_value.html#a3993e2966ea85fb8555fbb9ef92b9a0a" title="Constant member iterator for iterating in object.">ConstMemberIterator</a>;              <span class="comment">//!&lt; Constant member iterator for iterating in object.</span></div>
<div class="line"><a name="l00042"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#a06ce0e14ec83b53c83e1b1699b53a25e">   42</a></span>&#160;<span class="comment"></span>        <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>* <a class="code" href="classrapidjson_1_1_generic_value.html#a06ce0e14ec83b53c83e1b1699b53a25e" title="Value iterator for iterating in array.">ValueIterator</a>;                    <span class="comment">//!&lt; Value iterator for iterating in array.</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#a89a6588121742fc3f154b10b8f15f45f">   43</a></span>&#160;<span class="comment"></span>        <span class="keyword">typedef</span> <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>* <a class="code" href="classrapidjson_1_1_generic_value.html#a89a6588121742fc3f154b10b8f15f45f" title="Constant value iterator for iterating in array.">ConstValueIterator</a>; <span class="comment">//!&lt; Constant value iterator for iterating in array.</span></div>
<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="comment"></span><span class="comment"></span></div>
<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="comment">        //!@name Constructors and destructor.</span></div>
<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="comment"></span><span class="comment">        //@{</span></div>
<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="comment"></span><span class="comment"></span></div>
<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="comment">        //! Default constructor creates a null value.</span></div>
<div class="line"><a name="l00049"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a">   49</a></span>&#160;<span class="comment"></span>        <a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>() : flags_(kNullFlag) {}</div>
<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="comment">        //! Copy constructor is not permitted.</span></div>
<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="comment"></span><span class="keyword">private</span>:</div>
<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&amp; rhs);</div>
<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;</div>
<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="comment">        //! Constructor with JSON value type.</span></div>
<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="comment"></span><span class="comment">        /*! This creates a Value of specified type with default content.</span></div>
<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="comment">                \param type     Type of the value.</span></div>
<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="comment">                \note Default content for number is zero.</span></div>
<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="comment">        */</span></div>
<div class="line"><a name="l00062"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#a57db695546922612b5f6228ceec83b84">   62</a></span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html#a57db695546922612b5f6228ceec83b84" title="Constructor with JSON value type.">GenericValue</a>(Type type) {</div>
<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;                <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> defaultFlags[7] = {</div>
<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;                        kNullFlag, kFalseFlag, kTrueFlag, kObjectFlag, kArrayFlag, kConstStringFlag,</div>
<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;                        kNumberFlag | kIntFlag | kUintFlag | kInt64Flag | kUint64Flag | kDoubleFlag</div>
<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;                };</div>
<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;                RAPIDJSON_ASSERT(type &lt;= kNumberType);</div>
<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;                flags_ = defaultFlags[type];</div>
<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;                memset(&amp;data_, 0, <span class="keyword">sizeof</span>(data_));</div>
<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;        }</div>
<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="comment">        //! Constructor for boolean value.</span></div>
<div class="line"><a name="l00073"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#ad9805fd4c4fe30b7e34f71d0ca0d8229">   73</a></span>&#160;<span class="comment"></span>        <a class="code" href="classrapidjson_1_1_generic_value.html#ad9805fd4c4fe30b7e34f71d0ca0d8229" title="Constructor for boolean value.">GenericValue</a>(<span class="keywordtype">bool</span> b) : flags_(b ? kTrueFlag : kFalseFlag) {}</div>
<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;<span class="comment">        //! Constructor for int value.</span></div>
<div class="line"><a name="l00076"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#a3561f9bb69125f727915fa65859a5c5a">   76</a></span>&#160;<span class="comment"></span>        <a class="code" href="classrapidjson_1_1_generic_value.html#a3561f9bb69125f727915fa65859a5c5a" title="Constructor for int value.">GenericValue</a>(<span class="keywordtype">int</span> i) : flags_(kNumberIntFlag) { </div>
<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;                data_.n.i64 = i;</div>
<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;                <span class="keywordflow">if</span> (i &gt;= 0)</div>
<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;                        flags_ |= kUintFlag | kUint64Flag;</div>
<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;        }</div>
<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;<span class="comment">        //! Constructor for unsigned value.</span></div>
<div class="line"><a name="l00083"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#a512f2c90e9fa10a22fc8cc2586119c26">   83</a></span>&#160;<span class="comment"></span>        <a class="code" href="classrapidjson_1_1_generic_value.html#a512f2c90e9fa10a22fc8cc2586119c26" title="Constructor for unsigned value.">GenericValue</a>(<span class="keywordtype">unsigned</span> u) : flags_(kNumberUintFlag) {</div>
<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;                data_.n.u64 = u; </div>
<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;                <span class="keywordflow">if</span> (!(u &amp; 0x80000000))</div>
<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;                        flags_ |= kIntFlag | kInt64Flag;</div>
<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;        }</div>
<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;<span class="comment">        //! Constructor for int64_t value.</span></div>
<div class="line"><a name="l00090"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#acb03c8e879b695b54aa76bd7a7561a14">   90</a></span>&#160;<span class="comment"></span>        <a class="code" href="classrapidjson_1_1_generic_value.html#acb03c8e879b695b54aa76bd7a7561a14" title="Constructor for int64_t value.">GenericValue</a>(int64_t i64) : flags_(kNumberInt64Flag) {</div>
<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;                data_.n.i64 = i64;</div>
<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;                <span class="keywordflow">if</span> (i64 &gt;= 0) {</div>
<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;                        flags_ |= kNumberUint64Flag;</div>
<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;                        <span class="keywordflow">if</span> (!(i64 &amp; 0xFFFFFFFF00000000LL))</div>
<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;                                flags_ |= kUintFlag;</div>
<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;                        <span class="keywordflow">if</span> (!(i64 &amp; 0xFFFFFFFF80000000LL))</div>
<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;                                flags_ |= kIntFlag;</div>
<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;                }</div>
<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;                <span class="keywordflow">else</span> <span class="keywordflow">if</span> (i64 &gt;= -2147483648LL)</div>
<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;                        flags_ |= kIntFlag;</div>
<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;        }</div>
<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;<span class="comment">        //! Constructor for uint64_t value.</span></div>
<div class="line"><a name="l00104"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#aec1c96c6af575bdb7d31423e543d2062">  104</a></span>&#160;<span class="comment"></span>        <a class="code" href="classrapidjson_1_1_generic_value.html#aec1c96c6af575bdb7d31423e543d2062" title="Constructor for uint64_t value.">GenericValue</a>(uint64_t u64) : flags_(kNumberUint64Flag) {</div>
<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;                data_.n.u64 = u64;</div>
<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;                <span class="keywordflow">if</span> (!(u64 &amp; 0x8000000000000000ULL))</div>
<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;                        flags_ |= kInt64Flag;</div>
<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;                <span class="keywordflow">if</span> (!(u64 &amp; 0xFFFFFFFF00000000ULL))</div>
<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;                        flags_ |= kUintFlag;</div>
<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;                <span class="keywordflow">if</span> (!(u64 &amp; 0xFFFFFFFF80000000ULL))</div>
<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;                        flags_ |= kIntFlag;</div>
<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;        }</div>
<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;<span class="comment">        //! Constructor for double value.</span></div>
<div class="line"><a name="l00115"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#aa872e2c9013c549489cacc7a3953ae40">  115</a></span>&#160;<span class="comment"></span>        <a class="code" href="classrapidjson_1_1_generic_value.html#aa872e2c9013c549489cacc7a3953ae40" title="Constructor for double value.">GenericValue</a>(<span class="keywordtype">double</span> d) : flags_(kNumberDoubleFlag) { data_.n.d = d; }</div>
<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;<span class="comment">        //! Constructor for constant string (i.e. do not make a copy of string)</span></div>
<div class="line"><a name="l00118"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#a686da69cce849f21c9b43b6c2177b412">  118</a></span>&#160;<span class="comment"></span>        <a class="code" href="classrapidjson_1_1_generic_value.html#a686da69cce849f21c9b43b6c2177b412" title="Constructor for constant string (i.e. do not make a copy of string)">GenericValue</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>* s, SizeType length) { </div>
<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;                RAPIDJSON_ASSERT(s != NULL);</div>
<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;                flags_ = kConstStringFlag;</div>
<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;                data_.s.str = s;</div>
<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;                data_.s.length = length;</div>
<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;        }</div>
<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;<span class="comment">        //! Constructor for constant string (i.e. do not make a copy of string)</span></div>
<div class="line"><a name="l00126"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#aacca21e094fba2c0c3315ef2eb3c4b0c">  126</a></span>&#160;<span class="comment"></span>        <a class="code" href="classrapidjson_1_1_generic_value.html#aacca21e094fba2c0c3315ef2eb3c4b0c" title="Constructor for constant string (i.e. do not make a copy of string)">GenericValue</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>* s) { SetStringRaw(s, internal::StrLen(s)); }</div>
<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;<span class="comment">        //! Constructor for copy-string (i.e. do make a copy of string)</span></div>
<div class="line"><a name="l00129"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#ad9553bb9ccbfd19547c473a95405a8b2">  129</a></span>&#160;<span class="comment"></span>        <a class="code" href="classrapidjson_1_1_generic_value.html#ad9553bb9ccbfd19547c473a95405a8b2" title="Constructor for copy-string (i.e. do make a copy of string)">GenericValue</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>* s, SizeType length, <a class="code" href="classrapidjson_1_1_allocator.html" title="Concept for allocating, resizing and freeing memory block.">Allocator</a>&amp; allocator) { SetStringRaw(s, length, allocator); }</div>
<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;<span class="comment">        //! Constructor for copy-string (i.e. do make a copy of string)</span></div>
<div class="line"><a name="l00132"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#a83ba61e8a5170c2e172fd60ebc11016f">  132</a></span>&#160;<span class="comment"></span>        <a class="code" href="classrapidjson_1_1_generic_value.html#a83ba61e8a5170c2e172fd60ebc11016f" title="Constructor for copy-string (i.e. do make a copy of string)">GenericValue</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>*s, <a class="code" href="classrapidjson_1_1_allocator.html" title="Concept for allocating, resizing and freeing memory block.">Allocator</a>&amp; allocator) { SetStringRaw(s, internal::StrLen(s), allocator); }</div>
<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;<span class="comment">        //! Destructor.</span></div>
<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;<span class="comment"></span><span class="comment">        /*! Need to destruct elements of array, members of object, or copy-string.</span></div>
<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;<span class="comment">        */</span></div>
<div class="line"><a name="l00137"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#a433a64b466c80cadf7d1acaa6f065437">  137</a></span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html#a433a64b466c80cadf7d1acaa6f065437" title="Destructor.">~GenericValue</a>() {</div>
<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;                <span class="keywordflow">if</span> (Allocator::kNeedFree) {     <span class="comment">// Shortcut by Allocator&#39;s trait</span></div>
<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;                        <span class="keywordflow">switch</span>(flags_) {</div>
<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;                        <span class="keywordflow">case</span> kArrayFlag:</div>
<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;                                <span class="keywordflow">for</span> (<a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>* v = data_.a.elements; v != data_.a.elements + data_.a.size; ++v)</div>
<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;                                        v-&gt;~GenericValue();</div>
<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;                                Allocator::Free(data_.a.elements);</div>
<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;                                <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;</div>
<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;                        <span class="keywordflow">case</span> kObjectFlag:</div>
<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;                                <span class="keywordflow">for</span> (<a class="code" href="structrapidjson_1_1_generic_value_1_1_member.html" title="Name-value pair in an object.">Member</a>* m = data_.o.members; m != data_.o.members + data_.o.size; ++m) {</div>
<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;                                        m-&gt;name.~GenericValue();</div>
<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;                                        m-&gt;value.~GenericValue();</div>
<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;                                }</div>
<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;                                Allocator::Free(data_.o.members);</div>
<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;                                <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;</div>
<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;                        <span class="keywordflow">case</span> kCopyStringFlag:</div>
<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;                                Allocator::Free(const_cast&lt;Ch*&gt;(data_.s.str));</div>
<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;                                <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;                        }</div>
<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;                }</div>
<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;        }</div>
<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;<span class="comment">        //@}</span></div>
<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;<span class="comment"></span><span class="comment"></span></div>
<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;<span class="comment">        //!@name Assignment operators</span></div>
<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;<span class="comment"></span><span class="comment">        //@{</span></div>
<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;<span class="comment"></span><span class="comment"></span></div>
<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;<span class="comment">        //! Assignment with move semantics.</span></div>
<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;<span class="comment"></span><span class="comment">        /*! \param rhs Source of the assignment. It will become a null value after assignment.</span></div>
<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;<span class="comment">        */</span></div>
<div class="line"><a name="l00169"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#a3fb70e8c00c895212e477514491da90c">  169</a></span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a3fb70e8c00c895212e477514491da90c" title="Assignment with move semantics.">operator=</a>(<a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&amp; rhs) {</div>
<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;                RAPIDJSON_ASSERT(<span class="keyword">this</span> != &amp;rhs);</div>
<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;                this-&gt;<a class="code" href="classrapidjson_1_1_generic_value.html#a433a64b466c80cadf7d1acaa6f065437" title="Destructor.">~GenericValue</a>();</div>
<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;                memcpy(<span class="keyword">this</span>, &amp;rhs, <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>));</div>
<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;                rhs.flags_ = kNullFlag;</div>
<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;                <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;        }</div>
<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;<span class="comment">        //! Assignment with primitive types.</span></div>
<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;<span class="comment"></span><span class="comment">        /*! \tparam T Either Type, int, unsigned, int64_t, uint64_t, const Ch*</span></div>
<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;<span class="comment">                \param value The value to be assigned.</span></div>
<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;<span class="comment">        */</span></div>
<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;        <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00182"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#ab7446da62fdc61d6d987d508cdb6ac13">  182</a></span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ab7446da62fdc61d6d987d508cdb6ac13" title="Assignment with primitive types.">operator=</a>(T value) {</div>
<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;                this-&gt;<a class="code" href="classrapidjson_1_1_generic_value.html#a433a64b466c80cadf7d1acaa6f065437" title="Destructor.">~GenericValue</a>();</div>
<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;                <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>(value);</div>
<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;                <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;        }<span class="comment"></span></div>
<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;<span class="comment">        //@}</span></div>
<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;<span class="comment"></span><span class="comment"></span></div>
<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;<span class="comment">        //!@name Type</span></div>
<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;<span class="comment"></span><span class="comment">        //@{</span></div>
<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;        Type GetType()<span class="keyword">  const </span>{ <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Type<span class="keyword">&gt;</span>(flags_ &amp; kTypeMask); }</div>
<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;        <span class="keywordtype">bool</span> IsNull()<span class="keyword">   const </span>{ <span class="keywordflow">return</span> flags_ == kNullFlag; }</div>
<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;        <span class="keywordtype">bool</span> IsFalse()<span class="keyword">  const </span>{ <span class="keywordflow">return</span> flags_ == kFalseFlag; }</div>
<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;        <span class="keywordtype">bool</span> IsTrue()<span class="keyword">   const </span>{ <span class="keywordflow">return</span> flags_ == kTrueFlag; }</div>
<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;        <span class="keywordtype">bool</span> IsBool()<span class="keyword">   const </span>{ <span class="keywordflow">return</span> (flags_ &amp; kBoolFlag) != 0; }</div>
<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;        <span class="keywordtype">bool</span> IsObject()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> flags_ == kObjectFlag; }</div>
<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;        <span class="keywordtype">bool</span> IsArray()<span class="keyword">  const </span>{ <span class="keywordflow">return</span> flags_ == kArrayFlag; }</div>
<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;        <span class="keywordtype">bool</span> IsNumber()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (flags_ &amp; kNumberFlag) != 0; }</div>
<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;        <span class="keywordtype">bool</span> IsInt()<span class="keyword">    const </span>{ <span class="keywordflow">return</span> (flags_ &amp; kIntFlag) != 0; }</div>
<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;        <span class="keywordtype">bool</span> IsUint()<span class="keyword">   const </span>{ <span class="keywordflow">return</span> (flags_ &amp; kUintFlag) != 0; }</div>
<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;        <span class="keywordtype">bool</span> IsInt64()<span class="keyword">  const </span>{ <span class="keywordflow">return</span> (flags_ &amp; kInt64Flag) != 0; }</div>
<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;        <span class="keywordtype">bool</span> IsUint64()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (flags_ &amp; kUint64Flag) != 0; }</div>
<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;        <span class="keywordtype">bool</span> IsDouble()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (flags_ &amp; kDoubleFlag) != 0; }</div>
<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;        <span class="keywordtype">bool</span> IsString()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (flags_ &amp; kStringFlag) != 0; }</div>
<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;<span class="comment">        //@}</span></div>
<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;<span class="comment"></span><span class="comment"></span></div>
<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;<span class="comment">        //!@name Null</span></div>
<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;<span class="comment"></span><span class="comment">        //@{</span></div>
<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>&amp; SetNull() { this-&gt;<a class="code" href="classrapidjson_1_1_generic_value.html#a433a64b466c80cadf7d1acaa6f065437" title="Destructor.">~GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>(); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;<span class="comment">        //@}</span></div>
<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;<span class="comment"></span><span class="comment"></span></div>
<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;<span class="comment">        //!@name Bool</span></div>
<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;<span class="comment"></span><span class="comment">        //@{</span></div>
<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;        <span class="keywordtype">bool</span> GetBool()<span class="keyword"> const </span>{ RAPIDJSON_ASSERT(IsBool()); <span class="keywordflow">return</span> flags_ == kTrueFlag; }</div>
<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>&amp; SetBool(<span class="keywordtype">bool</span> b) { this-&gt;<a class="code" href="classrapidjson_1_1_generic_value.html#a433a64b466c80cadf7d1acaa6f065437" title="Destructor.">~GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>(b); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;<span class="comment">        //@}</span></div>
<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;<span class="comment"></span><span class="comment"></span></div>
<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;<span class="comment">        //!@name Object</span></div>
<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;<span class="comment"></span><span class="comment">        //@{</span></div>
<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;<span class="comment"></span><span class="comment"></span></div>
<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;<span class="comment">        //! Set this value as an empty object.</span></div>
<div class="line"><a name="l00228"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#a7cb3cbaefe4fb99aaf9f155fb4ee039b">  228</a></span>&#160;<span class="comment"></span>        <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a7cb3cbaefe4fb99aaf9f155fb4ee039b" title="Set this value as an empty object.">SetObject</a>() { this-&gt;<a class="code" href="classrapidjson_1_1_generic_value.html#a433a64b466c80cadf7d1acaa6f065437" title="Destructor.">~GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>(kObjectType); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;<span class="comment">        //! Get the value associated with the object&#39;s name.</span></div>
<div class="line"><a name="l00231"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#add08e21cc707a93e42a68ade2c23d1f4">  231</a></span>&#160;<span class="comment"></span>        <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#add08e21cc707a93e42a68ade2c23d1f4" title="Get the value associated with the object&#39;s name.">operator[]</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>* name) {</div>
<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;                <span class="keywordflow">if</span> (<a class="code" href="structrapidjson_1_1_generic_value_1_1_member.html" title="Name-value pair in an object.">Member</a>* member = FindMember(name))</div>
<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;                        <span class="keywordflow">return</span> member-&gt;value;</div>
<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;                <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;                        <span class="keyword">static</span> <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a> NullValue;</div>
<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;                        <span class="keywordflow">return</span> NullValue;</div>
<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;                }</div>
<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;        }</div>
<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;        <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#add08e21cc707a93e42a68ade2c23d1f4" title="Get the value associated with the object&#39;s name.">operator[]</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&amp;<span class="keyword">&gt;</span>(*this)[name]; }</div>
<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;<span class="comment">        //! Member iterators.</span></div>
<div class="line"><a name="l00242"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#a469c0cc3e72f846757fb64fa52fafee5">  242</a></span>&#160;<span class="comment"></span>        <a class="code" href="structrapidjson_1_1_generic_value_1_1_member.html" title="Name-value pair in an object.">ConstMemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a469c0cc3e72f846757fb64fa52fafee5" title="Member iterators.">MemberBegin</a>()<span class="keyword"> const </span>{ RAPIDJSON_ASSERT(IsObject()); <span class="keywordflow">return</span> data_.o.members; }</div>
<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html#a3993e2966ea85fb8555fbb9ef92b9a0a" title="Constant member iterator for iterating in object.">ConstMemberIterator</a> MemberEnd()<span class="keyword"> const   </span>{ RAPIDJSON_ASSERT(IsObject()); <span class="keywordflow">return</span> data_.o.members + data_.o.size; }</div>
<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html#acb76e48067e6a79e78457544bdb74e2f" title="Member iterator for iterating in object.">MemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a469c0cc3e72f846757fb64fa52fafee5" title="Member iterators.">MemberBegin</a>()                    { RAPIDJSON_ASSERT(IsObject()); <span class="keywordflow">return</span> data_.o.members; }</div>
<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html#acb76e48067e6a79e78457544bdb74e2f" title="Member iterator for iterating in object.">MemberIterator</a> MemberEnd()                              { RAPIDJSON_ASSERT(IsObject()); <span class="keywordflow">return</span> data_.o.members + data_.o.size; }</div>
<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;<span class="comment">        //! Check whether a member exists in the object.</span></div>
<div class="line"><a name="l00248"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#af17b9b6ba6a9fb4e02d2dced5aa0ee0c">  248</a></span>&#160;<span class="comment"></span>        <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#af17b9b6ba6a9fb4e02d2dced5aa0ee0c" title="Check whether a member exists in the object.">HasMember</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> FindMember(name) != 0; }</div>
<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;<span class="comment">        //! Add a member (name-value pair) to the object.</span></div>
<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;<span class="comment"></span><span class="comment">        /*! \param name A string value as name of member.</span></div>
<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;<span class="comment">                \param value Value of any type.</span></div>
<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;<span class="comment">            \param allocator Allocator for reallocating memory.</span></div>
<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;<span class="comment">            \return The value itself for fluent API.</span></div>
<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;<span class="comment">            \note The ownership of name and value will be transfered to this object if success.</span></div>
<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;<span class="comment">        */</span></div>
<div class="line"><a name="l00257"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#ab018d734d189532b27943bc45776ba68">  257</a></span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ab018d734d189532b27943bc45776ba68" title="Add a member (name-value pair) to the object.">AddMember</a>(<a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&amp; name, <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&amp; value, <a class="code" href="classrapidjson_1_1_allocator.html" title="Concept for allocating, resizing and freeing memory block.">Allocator</a>&amp; allocator) {</div>
<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;                RAPIDJSON_ASSERT(IsObject());</div>
<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;                RAPIDJSON_ASSERT(name.IsString());</div>
<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;                Object&amp; o = data_.o;</div>
<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;                <span class="keywordflow">if</span> (o.size &gt;= o.capacity) {</div>
<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;                        <span class="keywordflow">if</span> (o.capacity == 0) {</div>
<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;                                o.capacity = kDefaultObjectCapacity;</div>
<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;                                o.members = (<a class="code" href="structrapidjson_1_1_generic_value_1_1_member.html" title="Name-value pair in an object.">Member</a>*)allocator.Malloc(o.capacity * <span class="keyword">sizeof</span>(<a class="code" href="structrapidjson_1_1_generic_value_1_1_member.html" title="Name-value pair in an object.">Member</a>));</div>
<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;                        }</div>
<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;                        <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;                                SizeType oldCapacity = o.capacity;</div>
<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;                                o.capacity *= 2;</div>
<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;                                o.members = (<a class="code" href="structrapidjson_1_1_generic_value_1_1_member.html" title="Name-value pair in an object.">Member</a>*)allocator.Realloc(o.members, oldCapacity * <span class="keyword">sizeof</span>(<a class="code" href="structrapidjson_1_1_generic_value_1_1_member.html" title="Name-value pair in an object.">Member</a>), o.capacity * <span class="keyword">sizeof</span>(<a class="code" href="structrapidjson_1_1_generic_value_1_1_member.html" title="Name-value pair in an object.">Member</a>));</div>
<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;                        }</div>
<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;                }</div>
<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;                o.members[o.size].name.RawAssign(name);</div>
<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;                o.members[o.size].value.RawAssign(value);</div>
<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;                o.size++;</div>
<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;                <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;        }</div>
<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;</div>
<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ab018d734d189532b27943bc45776ba68" title="Add a member (name-value pair) to the object.">AddMember</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>* name, <a class="code" href="classrapidjson_1_1_allocator.html" title="Concept for allocating, resizing and freeing memory block.">Allocator</a>&amp; nameAllocator, <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&amp; value, <a class="code" href="classrapidjson_1_1_allocator.html" title="Concept for allocating, resizing and freeing memory block.">Allocator</a>&amp; allocator) {</div>
<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;                <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a> n(name, internal::StrLen(name), nameAllocator);</div>
<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;                <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ab018d734d189532b27943bc45776ba68" title="Add a member (name-value pair) to the object.">AddMember</a>(n, value, allocator);</div>
<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;        }</div>
<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;</div>
<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ab018d734d189532b27943bc45776ba68" title="Add a member (name-value pair) to the object.">AddMember</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>* name, <a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>&amp; value, Allocator&amp; allocator) {</div>
<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;                <a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a> n(name, internal::StrLen(name));</div>
<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;                <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ab018d734d189532b27943bc45776ba68" title="Add a member (name-value pair) to the object.">AddMember</a>(n, value, allocator);</div>
<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;        }</div>
<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;</div>
<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;        <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ab018d734d189532b27943bc45776ba68" title="Add a member (name-value pair) to the object.">AddMember</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>* name, T value, Allocator&amp; allocator) {</div>
<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;                <a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a> n(name, internal::StrLen(name));</div>
<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;                <a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a> v(value);</div>
<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;                <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ab018d734d189532b27943bc45776ba68" title="Add a member (name-value pair) to the object.">AddMember</a>(n, v, allocator);</div>
<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;        }</div>
<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;<span class="comment">        //! Remove a member in object by its name.</span></div>
<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;<span class="comment"></span><span class="comment">        /*! \param name Name of member to be removed.</span></div>
<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;<span class="comment">            \return Whether the member existed.</span></div>
<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;<span class="comment">            \note Removing member is implemented by moving the last member. So the ordering of members is changed.</span></div>
<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;<span class="comment">        */</span></div>
<div class="line"><a name="l00300"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#aa60074f72a6d1651828a104b0c6387b1">  300</a></span>&#160;        <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#aa60074f72a6d1651828a104b0c6387b1" title="Remove a member in object by its name.">RemoveMember</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>* name) {</div>
<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;                RAPIDJSON_ASSERT(IsObject());</div>
<div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;                <span class="keywordflow">if</span> (<a class="code" href="structrapidjson_1_1_generic_value_1_1_member.html" title="Name-value pair in an object.">Member</a>* m = FindMember(name)) {</div>
<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;                        RAPIDJSON_ASSERT(data_.o.size &gt; 0);</div>
<div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;                        RAPIDJSON_ASSERT(data_.o.members != 0);</div>
<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;</div>
<div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;                        <a class="code" href="structrapidjson_1_1_generic_value_1_1_member.html" title="Name-value pair in an object.">Member</a>* last = data_.o.members + (data_.o.size - 1);</div>
<div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;                        <span class="keywordflow">if</span> (data_.o.size &gt; 1 &amp;&amp; m != last) {</div>
<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;                                <span class="comment">// Move the last one to this place</span></div>
<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;                                m-&gt;name = last-&gt;<a class="code" href="structrapidjson_1_1_generic_value_1_1_member.html#a5cfe65e60d1a83905e822636aae6b046" title="name of member (must be a string)">name</a>;</div>
<div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;                                m-&gt;value = last-&gt;<a class="code" href="structrapidjson_1_1_generic_value_1_1_member.html#ad723422bbaf63b14ba8109d4c8a55a5b" title="value of member.">value</a>;</div>
<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;                        }</div>
<div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;                        <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;                                <span class="comment">// Only one left, just destroy</span></div>
<div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;                                m-&gt;name.~GenericValue();</div>
<div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;                                m-&gt;value.~GenericValue();</div>
<div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;                        }</div>
<div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;                        --data_.o.size;</div>
<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;                        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;                }</div>
<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;        }</div>
<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;<span class="comment">        //@}</span></div>
<div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;<span class="comment"></span><span class="comment"></span></div>
<div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;<span class="comment">        //!@name Array</span></div>
<div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;<span class="comment"></span><span class="comment">        //@{</span></div>
<div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;<span class="comment"></span><span class="comment"></span></div>
<div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;<span class="comment">        //! Set this value as an empty array.</span></div>
<div class="line"><a name="l00329"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#a25069c76d045b058e54835d8c467c789">  329</a></span>&#160;<span class="comment"></span>        <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a25069c76d045b058e54835d8c467c789" title="Set this value as an empty array.">SetArray</a>() {      this-&gt;<a class="code" href="classrapidjson_1_1_generic_value.html#a433a64b466c80cadf7d1acaa6f065437" title="Destructor.">~GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>(kArrayType); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
<div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;<span class="comment">        //! Get the number of elements in array.</span></div>
<div class="line"><a name="l00332"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#a2e6e849cfb368a3fa708f8bcf1d56ec9">  332</a></span>&#160;<span class="comment"></span>        SizeType <a class="code" href="classrapidjson_1_1_generic_value.html#a2e6e849cfb368a3fa708f8bcf1d56ec9" title="Get the number of elements in array.">Size</a>()<span class="keyword"> const </span>{ RAPIDJSON_ASSERT(IsArray()); <span class="keywordflow">return</span> data_.a.size; }</div>
<div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;<span class="comment">        //! Get the capacity of array.</span></div>
<div class="line"><a name="l00335"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#a6cbb8a305fdc40beb83bee2b99ac5b59">  335</a></span>&#160;<span class="comment"></span>        SizeType <a class="code" href="classrapidjson_1_1_generic_value.html#a6cbb8a305fdc40beb83bee2b99ac5b59" title="Get the capacity of array.">Capacity</a>()<span class="keyword"> const </span>{ RAPIDJSON_ASSERT(IsArray()); <span class="keywordflow">return</span> data_.a.capacity; }</div>
<div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;<span class="comment">        //! Check whether the array is empty.</span></div>
<div class="line"><a name="l00338"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#a08bf77a430b865404c57a93d8f0f6d3d">  338</a></span>&#160;<span class="comment"></span>        <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a08bf77a430b865404c57a93d8f0f6d3d" title="Check whether the array is empty.">Empty</a>()<span class="keyword"> const </span>{ RAPIDJSON_ASSERT(IsArray()); <span class="keywordflow">return</span> data_.a.size == 0; }</div>
<div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;<span class="comment">        //! Remove all elements in the array.</span></div>
<div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;<span class="comment"></span><span class="comment">        /*! This function do not deallocate memory in the array, i.e. the capacity is unchanged.</span></div>
<div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;<span class="comment">        */</span></div>
<div class="line"><a name="l00343"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#aa56b69bac5423622eff6998ce4802106">  343</a></span>&#160;        <span class="keywordtype">void</span> <a class="code" href="classrapidjson_1_1_generic_value.html#aa56b69bac5423622eff6998ce4802106" title="Remove all elements in the array.">Clear</a>() {</div>
<div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;                RAPIDJSON_ASSERT(IsArray()); </div>
<div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;                <span class="keywordflow">for</span> (SizeType i = 0; i &lt; data_.a.size; ++i)</div>
<div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;                        data_.a.elements[i].~GenericValue();</div>
<div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;                data_.a.size = 0;</div>
<div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;        }</div>
<div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;<span class="comment">        //! Get an element from array by index.</span></div>
<div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;<span class="comment"></span><span class="comment">        /*! \param index Zero-based index of element.</span></div>
<div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;<span class="comment">                \note</span></div>
<div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;<span class="comment">\code</span></div>
<div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;<span class="comment">Value a(kArrayType);</span></div>
<div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;<span class="comment">a.PushBack(123);</span></div>
<div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;<span class="comment">int x = a[0].GetInt();                          // Error: operator[ is ambiguous, as 0 also mean a null pointer of const char* type.</span></div>
<div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;<span class="comment">int y = a[SizeType(0)].GetInt();        // Cast to SizeType will work.</span></div>
<div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;<span class="comment">int z = a[0u].GetInt();                         // This works too.</span></div>
<div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;<span class="comment">\endcode</span></div>
<div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;<span class="comment">        */</span></div>
<div class="line"><a name="l00361"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#adc312de070d03a63e6c692c9c61db156">  361</a></span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#adc312de070d03a63e6c692c9c61db156" title="Get an element from array by index.">operator[]</a>(SizeType index) {</div>
<div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;                RAPIDJSON_ASSERT(IsArray());</div>
<div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;                RAPIDJSON_ASSERT(index &lt; data_.a.size);</div>
<div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;                <span class="keywordflow">return</span> data_.a.elements[index];</div>
<div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;        }</div>
<div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;        <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#add08e21cc707a93e42a68ade2c23d1f4" title="Get the value associated with the object&#39;s name.">operator[]</a>(SizeType index)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&amp;<span class="keyword">&gt;</span>(*this)[index]; }</div>
<div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;<span class="comment">        //! Element iterator</span></div>
<div class="line"><a name="l00369"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#a8d1040c479d89edb261db86400ebe603">  369</a></span>&#160;<span class="comment"></span>        <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">ValueIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a8d1040c479d89edb261db86400ebe603" title="Element iterator.">Begin</a>() { RAPIDJSON_ASSERT(IsArray()); <span class="keywordflow">return</span> data_.a.elements; }</div>
<div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html#a06ce0e14ec83b53c83e1b1699b53a25e" title="Value iterator for iterating in array.">ValueIterator</a> End() { RAPIDJSON_ASSERT(IsArray()); <span class="keywordflow">return</span> data_.a.elements + data_.a.size; }</div>
<div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html#a89a6588121742fc3f154b10b8f15f45f" title="Constant value iterator for iterating in array.">ConstValueIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a8d1040c479d89edb261db86400ebe603" title="Element iterator.">Begin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>&amp;<span class="keyword">&gt;</span>(*this).Begin(); }</div>
<div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html#a89a6588121742fc3f154b10b8f15f45f" title="Constant value iterator for iterating in array.">ConstValueIterator</a> End()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>&amp;<span class="keyword">&gt;</span>(*this).End(); }</div>
<div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;<span class="comment">        //! Request the array to have enough capacity to store elements.</span></div>
<div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;<span class="comment"></span><span class="comment">        /*! \param newCapacity  The capacity that the array at least need to have.</span></div>
<div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;<span class="comment">                \param allocator        The allocator for allocating memory. It must be the same one use previously.</span></div>
<div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;<span class="comment">                \return The value itself for fluent API.</span></div>
<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;<span class="comment">        */</span></div>
<div class="line"><a name="l00379"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#a17971ba2bcd4eb1716098fdfe9182386">  379</a></span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a17971ba2bcd4eb1716098fdfe9182386" title="Request the array to have enough capacity to store elements.">Reserve</a>(SizeType newCapacity, <a class="code" href="classrapidjson_1_1_allocator.html" title="Concept for allocating, resizing and freeing memory block.">Allocator</a> &amp;allocator) {</div>
<div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;                RAPIDJSON_ASSERT(IsArray());</div>
<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;                <span class="keywordflow">if</span> (newCapacity &gt; data_.a.capacity) {</div>
<div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;                        data_.a.elements = (<a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>*)allocator.Realloc(data_.a.elements, data_.a.capacity * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>), newCapacity * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>));</div>
<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;                        data_.a.capacity = newCapacity;</div>
<div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;                }</div>
<div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;                <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;        }</div>
<div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;<span class="comment">        //! Append a value at the end of the array.</span></div>
<div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;<span class="comment"></span><span class="comment">        /*! \param value                The value to be appended.</span></div>
<div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;<span class="comment">            \param allocator    The allocator for allocating memory. It must be the same one use previously.</span></div>
<div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;<span class="comment">            \return The value itself for fluent API.</span></div>
<div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;<span class="comment">            \note The ownership of the value will be transfered to this object if success.</span></div>
<div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;<span class="comment">            \note If the number of elements to be appended is known, calls Reserve() once first may be more efficient.</span></div>
<div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;<span class="comment">        */</span></div>
<div class="line"><a name="l00395"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#a0ec9f34bef5890241d4bc882b73b1db4">  395</a></span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a0ec9f34bef5890241d4bc882b73b1db4" title="Append a value at the end of the array.">PushBack</a>(<a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&amp; value, <a class="code" href="classrapidjson_1_1_allocator.html" title="Concept for allocating, resizing and freeing memory block.">Allocator</a>&amp; allocator) {</div>
<div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;                RAPIDJSON_ASSERT(IsArray());</div>
<div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;                <span class="keywordflow">if</span> (data_.a.size &gt;= data_.a.capacity)</div>
<div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;                        <a class="code" href="classrapidjson_1_1_generic_value.html#a17971ba2bcd4eb1716098fdfe9182386" title="Request the array to have enough capacity to store elements.">Reserve</a>(data_.a.capacity == 0 ? kDefaultArrayCapacity : data_.a.capacity * 2, allocator);</div>
<div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;                data_.a.elements[data_.a.size++].RawAssign(value);</div>
<div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;                <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;        }</div>
<div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;</div>
<div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;        <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a0ec9f34bef5890241d4bc882b73b1db4" title="Append a value at the end of the array.">PushBack</a>(T value, <a class="code" href="classrapidjson_1_1_allocator.html" title="Concept for allocating, resizing and freeing memory block.">Allocator</a>&amp; allocator) {</div>
<div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;                <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a> v(value);</div>
<div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;                <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a0ec9f34bef5890241d4bc882b73b1db4" title="Append a value at the end of the array.">PushBack</a>(v, allocator);</div>
<div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;        }</div>
<div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;<span class="comment">        //! Remove the last element in the array.</span></div>
<div class="line"><a name="l00410"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#ae475f31fb851138ced40e2ff6cb43ca6">  410</a></span>&#160;<span class="comment"></span>        <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ae475f31fb851138ced40e2ff6cb43ca6" title="Remove the last element in the array.">PopBack</a>() {</div>
<div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;                RAPIDJSON_ASSERT(IsArray());</div>
<div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;                RAPIDJSON_ASSERT(!<a class="code" href="classrapidjson_1_1_generic_value.html#a08bf77a430b865404c57a93d8f0f6d3d" title="Check whether the array is empty.">Empty</a>());</div>
<div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;                data_.a.elements[--data_.a.size].~GenericValue();</div>
<div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;                <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;        }<span class="comment"></span></div>
<div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;<span class="comment">        //@}</span></div>
<div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;<span class="comment"></span><span class="comment"></span></div>
<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;<span class="comment">        //!@name Number</span></div>
<div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;<span class="comment"></span><span class="comment">        //@{</span></div>
<div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;        <span class="keywordtype">int</span> GetInt()<span class="keyword"> const                      </span>{ RAPIDJSON_ASSERT(flags_ &amp; kIntFlag);   <span class="keywordflow">return</span> data_.n.i.i;   }</div>
<div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;        <span class="keywordtype">unsigned</span> GetUint()<span class="keyword"> const        </span>{ RAPIDJSON_ASSERT(flags_ &amp; kUintFlag);  <span class="keywordflow">return</span> data_.n.u.u;   }</div>
<div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;        int64_t GetInt64()<span class="keyword"> const        </span>{ RAPIDJSON_ASSERT(flags_ &amp; kInt64Flag); <span class="keywordflow">return</span> data_.n.i64; }</div>
<div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;        uint64_t GetUint64()<span class="keyword"> const      </span>{ RAPIDJSON_ASSERT(flags_ &amp; kUint64Flag); <span class="keywordflow">return</span> data_.n.u64; }</div>
<div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;</div>
<div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;        <span class="keywordtype">double</span> GetDouble()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;                RAPIDJSON_ASSERT(IsNumber());</div>
<div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;                <span class="keywordflow">if</span> ((flags_ &amp; kDoubleFlag) != 0)                                <span class="keywordflow">return</span> data_.n.d;       <span class="comment">// exact type, no conversion.</span></div>
<div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;                <span class="keywordflow">if</span> ((flags_ &amp; kIntFlag) != 0)                                   <span class="keywordflow">return</span> data_.n.i.i;     <span class="comment">// int -&gt; double</span></div>
<div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;                <span class="keywordflow">if</span> ((flags_ &amp; kUintFlag) != 0)                                  <span class="keywordflow">return</span> data_.n.u.u;     <span class="comment">// unsigned -&gt; double</span></div>
<div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;                <span class="keywordflow">if</span> ((flags_ &amp; kInt64Flag) != 0)                                 <span class="keywordflow">return</span> (<span class="keywordtype">double</span>)data_.n.i64; <span class="comment">// int64_t -&gt; double (may lose precision)</span></div>
<div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;                RAPIDJSON_ASSERT((flags_ &amp; kUint64Flag) != 0);  <span class="keywordflow">return</span> (<span class="keywordtype">double</span>)data_.n.u64;     <span class="comment">// uint64_t -&gt; double (may lose precision)</span></div>
<div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;        }</div>
<div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;</div>
<div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>&amp; SetInt(<span class="keywordtype">int</span> i)                             { this-&gt;<a class="code" href="classrapidjson_1_1_generic_value.html#a433a64b466c80cadf7d1acaa6f065437" title="Destructor.">~GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>(i);    <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
<div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>&amp; SetUint(<span class="keywordtype">unsigned</span> u)               { this-&gt;<a class="code" href="classrapidjson_1_1_generic_value.html#a433a64b466c80cadf7d1acaa6f065437" title="Destructor.">~GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>(u);    <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
<div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>&amp; SetInt64(int64_t i64)             { this-&gt;<a class="code" href="classrapidjson_1_1_generic_value.html#a433a64b466c80cadf7d1acaa6f065437" title="Destructor.">~GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>(i64);  <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
<div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>&amp; SetUint64(uint64_t u64)   { this-&gt;<a class="code" href="classrapidjson_1_1_generic_value.html#a433a64b466c80cadf7d1acaa6f065437" title="Destructor.">~GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>(u64);  <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
<div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>&amp; SetDouble(<span class="keywordtype">double</span> d)               { this-&gt;<a class="code" href="classrapidjson_1_1_generic_value.html#a433a64b466c80cadf7d1acaa6f065437" title="Destructor.">~GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>(d);    <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
<div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;<span class="comment">        //@}</span></div>
<div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;<span class="comment"></span><span class="comment"></span></div>
<div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;<span class="comment">        //!@name String</span></div>
<div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;<span class="comment"></span><span class="comment">        //@{</span></div>
<div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;        <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>* GetString()<span class="keyword"> const </span>{ RAPIDJSON_ASSERT(IsString()); <span class="keywordflow">return</span> data_.s.str; }</div>
<div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;<span class="comment">        //! Get the length of string.</span></div>
<div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;<span class="comment"></span><span class="comment">        /*! Since rapidjson permits &quot;\u0000&quot; in the json string, strlen(v.GetString()) may not equal to v.GetStringLength().</span></div>
<div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;<span class="comment">        */</span></div>
<div class="line"><a name="l00451"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#a979c4ba6dd2a311be837ae083423aca8">  451</a></span>&#160;        SizeType <a class="code" href="classrapidjson_1_1_generic_value.html#a979c4ba6dd2a311be837ae083423aca8" title="Get the length of string.">GetStringLength</a>()<span class="keyword"> const </span>{ RAPIDJSON_ASSERT(IsString()); <span class="keywordflow">return</span> data_.s.length; }</div>
<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;<span class="comment">        //! Set this value as a string without copying source string.</span></div>
<div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;<span class="comment"></span><span class="comment">        /*! This version has better performance with supplied length, and also support string containing null character.</span></div>
<div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;<span class="comment">                \param s source string pointer. </span></div>
<div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;<span class="comment">                \param length The length of source string, excluding the trailing null terminator.</span></div>
<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;<span class="comment">                \return The value itself for fluent API.</span></div>
<div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;<span class="comment">        */</span></div>
<div class="line"><a name="l00459"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#afb91480cc6242ca96ffc603e649c319f">  459</a></span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#afb91480cc6242ca96ffc603e649c319f" title="Set this value as a string without copying source string.">SetString</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>* s, SizeType length) { this-&gt;<a class="code" href="classrapidjson_1_1_generic_value.html#a433a64b466c80cadf7d1acaa6f065437" title="Destructor.">~GenericValue</a>(); SetStringRaw(s, length); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
<div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;<span class="comment">        //! Set this value as a string without copying source string.</span></div>
<div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;<span class="comment"></span><span class="comment">        /*! \param s source string pointer. </span></div>
<div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;<span class="comment">                \return The value itself for fluent API.</span></div>
<div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;<span class="comment">        */</span></div>
<div class="line"><a name="l00465"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#ab824348953d9a654c6608938c7189580">  465</a></span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ab824348953d9a654c6608938c7189580" title="Set this value as a string without copying source string.">SetString</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>* s) { <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ab824348953d9a654c6608938c7189580" title="Set this value as a string without copying source string.">SetString</a>(s, internal::StrLen(s)); }</div>
<div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;<span class="comment">        //! Set this value as a string by copying from source string.</span></div>
<div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;<span class="comment"></span><span class="comment">        /*! This version has better performance with supplied length, and also support string containing null character.</span></div>
<div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;<span class="comment">                \param s source string. </span></div>
<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;<span class="comment">                \param length The length of source string, excluding the trailing null terminator.</span></div>
<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;<span class="comment">                \param allocator Allocator for allocating copied buffer. Commonly use document.GetAllocator().</span></div>
<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;<span class="comment">                \return The value itself for fluent API.</span></div>
<div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;<span class="comment">        */</span></div>
<div class="line"><a name="l00474"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#ae6351043ec30d8a151b0a072cfbc46d5">  474</a></span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ae6351043ec30d8a151b0a072cfbc46d5" title="Set this value as a string by copying from source string.">SetString</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>* s, SizeType length, <a class="code" href="classrapidjson_1_1_allocator.html" title="Concept for allocating, resizing and freeing memory block.">Allocator</a>&amp; allocator) { this-&gt;<a class="code" href="classrapidjson_1_1_generic_value.html#a433a64b466c80cadf7d1acaa6f065437" title="Destructor.">~GenericValue</a>(); SetStringRaw(s, length, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
<div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;<span class="comment">        //! Set this value as a string by copying from source string.</span></div>
<div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;<span class="comment"></span><span class="comment">        /*!     \param s source string. </span></div>
<div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;<span class="comment">                \param allocator Allocator for allocating copied buffer. Commonly use document.GetAllocator().</span></div>
<div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;<span class="comment">                \return The value itself for fluent API.</span></div>
<div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;<span class="comment">        */</span></div>
<div class="line"><a name="l00481"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#ab4babf200cac2dacb412a3ea279ddf5b">  481</a></span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ab4babf200cac2dacb412a3ea279ddf5b" title="Set this value as a string by copying from source string.">SetString</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>* s, <a class="code" href="classrapidjson_1_1_allocator.html" title="Concept for allocating, resizing and freeing memory block.">Allocator</a>&amp; allocator) {    <a class="code" href="classrapidjson_1_1_generic_value.html#ab4babf200cac2dacb412a3ea279ddf5b" title="Set this value as a string by copying from source string.">SetString</a>(s, internal::StrLen(s), allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
<div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;<span class="comment">        //@}</span></div>
<div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;<span class="comment"></span><span class="comment"></span></div>
<div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;<span class="comment">        //! Generate events of this value to a Handler.</span></div>
<div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;<span class="comment"></span><span class="comment">        /*! This function adopts the GoF visitor pattern.</span></div>
<div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;<span class="comment">                Typical usage is to output this JSON value as JSON text via Writer, which is a Handler.</span></div>
<div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;<span class="comment">                It can also be used to deep clone this value via GenericDocument, which is also a Handler.</span></div>
<div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;<span class="comment">                \tparam Handler type of handler.</span></div>
<div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;<span class="comment">                \param handler An object implementing concept Handler.</span></div>
<div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;<span class="comment">        */</span></div>
<div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;        <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Handler&gt;</div>
<div class="line"><a name="l00493"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_value.html#ac9787450c50b9ba3236de8c58d53df10">  493</a></span>&#160;        <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ac9787450c50b9ba3236de8c58d53df10" title="Generate events of this value to a Handler.">Accept</a>(<a class="code" href="classrapidjson_1_1_handler.html" title="Concept for receiving events from GenericReader upon parsing.">Handler</a>&amp; handler)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;                <span class="keywordflow">switch</span>(GetType()) {</div>
<div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;                <span class="keywordflow">case</span> kNullType:         handler.Null(); <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;                <span class="keywordflow">case</span> kFalseType:        handler.Bool(<span class="keyword">false</span>); <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;                <span class="keywordflow">case</span> kTrueType:         handler.Bool(<span class="keyword">true</span>); <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;</div>
<div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;                <span class="keywordflow">case</span> kObjectType:</div>
<div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;                        handler.StartObject();</div>
<div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;                        <span class="keywordflow">for</span> (<a class="code" href="structrapidjson_1_1_generic_value_1_1_member.html" title="Name-value pair in an object.">Member</a>* m = data_.o.members; m != data_.o.members + data_.o.size; ++m) {</div>
<div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;                                handler.String(m-&gt;name.data_.s.str, m-&gt;name.data_.s.length, <span class="keyword">false</span>);</div>
<div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;                                m-&gt;value.Accept(handler);</div>
<div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;                        }</div>
<div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;                        handler.EndObject(data_.o.size);</div>
<div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;                        <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;</div>
<div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;                <span class="keywordflow">case</span> kArrayType:</div>
<div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;                        handler.StartArray();</div>
<div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;                        <span class="keywordflow">for</span> (<a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>* v = data_.a.elements; v != data_.a.elements + data_.a.size; ++v)</div>
<div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;                                v-&gt;Accept(handler);</div>
<div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;                        handler.EndArray(data_.a.size);</div>
<div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;                        <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;</div>
<div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;                <span class="keywordflow">case</span> kStringType:</div>
<div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;                        handler.String(data_.s.str, data_.s.length, <span class="keyword">false</span>);</div>
<div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;                        <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;</div>
<div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;                <span class="keywordflow">case</span> kNumberType:</div>
<div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;                        <span class="keywordflow">if</span> (IsInt())                    handler.Int(data_.n.i.i);</div>
<div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;                        <span class="keywordflow">else</span> <span class="keywordflow">if</span> (IsUint())              handler.Uint(data_.n.u.u);</div>
<div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;                        <span class="keywordflow">else</span> <span class="keywordflow">if</span> (IsInt64())             handler.Int64(data_.n.i64);</div>
<div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;                        <span class="keywordflow">else</span> <span class="keywordflow">if</span> (IsUint64())    handler.Uint64(data_.n.u64);</div>
<div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;                        <span class="keywordflow">else</span>                                    handler.Double(data_.n.d);</div>
<div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;                        <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;                }</div>
<div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;                <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;        }</div>
<div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;</div>
<div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;        <span class="keyword">template</span> &lt;<span class="keyword">typename</span>, <span class="keyword">typename</span>&gt;</div>
<div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;        <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_document.html" title="A document for parsing JSON text as DOM.">GenericDocument</a>;</div>
<div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;</div>
<div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;        <span class="keyword">enum</span> {</div>
<div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;                kBoolFlag = 0x100,</div>
<div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;                kNumberFlag = 0x200,</div>
<div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;                kIntFlag = 0x400,</div>
<div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;                kUintFlag = 0x800,</div>
<div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;                kInt64Flag = 0x1000,</div>
<div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;                kUint64Flag = 0x2000,</div>
<div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;                kDoubleFlag = 0x4000,</div>
<div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;                kStringFlag = 0x100000,</div>
<div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;                kCopyFlag = 0x200000,</div>
<div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;</div>
<div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;                <span class="comment">// Initial flags of different types.</span></div>
<div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;                kNullFlag = kNullType,</div>
<div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;                kTrueFlag = kTrueType | kBoolFlag,</div>
<div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;                kFalseFlag = kFalseType | kBoolFlag,</div>
<div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;                kNumberIntFlag = kNumberType | kNumberFlag | kIntFlag | kInt64Flag,</div>
<div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;                kNumberUintFlag = kNumberType | kNumberFlag | kUintFlag | kUint64Flag | kInt64Flag,</div>
<div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;                kNumberInt64Flag = kNumberType | kNumberFlag | kInt64Flag,</div>
<div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;                kNumberUint64Flag = kNumberType | kNumberFlag | kUint64Flag,</div>
<div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;                kNumberDoubleFlag = kNumberType | kNumberFlag | kDoubleFlag,</div>
<div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;                kConstStringFlag = kStringType | kStringFlag,</div>
<div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;                kCopyStringFlag = kStringType | kStringFlag | kCopyFlag,</div>
<div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;                kObjectFlag = kObjectType,</div>
<div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;                kArrayFlag = kArrayType,</div>
<div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;</div>
<div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;                kTypeMask = 0xFF        <span class="comment">// bitwise-and with mask of 0xFF can be optimized by compiler</span></div>
<div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;        };</div>
<div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;</div>
<div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;        <span class="keyword">static</span> <span class="keyword">const</span> SizeType kDefaultArrayCapacity = 16;</div>
<div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;        <span class="keyword">static</span> <span class="keyword">const</span> SizeType kDefaultObjectCapacity = 16;</div>
<div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;</div>
<div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;        <span class="keyword">struct </span>String {</div>
<div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;                <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>* str;</div>
<div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;                SizeType length;</div>
<div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;                <span class="keywordtype">unsigned</span> hashcode;      <span class="comment">//!&lt; reserved</span></div>
<div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;<span class="comment"></span>        };      <span class="comment">// 12 bytes in 32-bit mode, 16 bytes in 64-bit mode</span></div>
<div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;</div>
<div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;        <span class="comment">// By using proper binary layout, retrieval of different integer types do not need conversions.</span></div>
<div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;        <span class="keyword">union </span>Number {</div>
<div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;<span class="preprocessor">#if RAPIDJSON_ENDIAN == RAPIDJSON_LITTLEENDIAN</span></div>
<div class="line"><a name="l00574"></a><span class="lineno"><a class="code" href="structrapidjson_1_1_generic_value_1_1_number_1_1_i.html">  574</a></span>&#160;<span class="preprocessor"></span>                <span class="keyword">struct </span><a class="code" href="structrapidjson_1_1_generic_value_1_1_number_1_1_i.html">I</a> {</div>
<div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;                        <span class="keywordtype">int</span> i;</div>
<div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;                        <span class="keywordtype">char</span> padding[4];</div>
<div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;                }i;</div>
<div class="line"><a name="l00578"></a><span class="lineno"><a class="code" href="structrapidjson_1_1_generic_value_1_1_number_1_1_u.html">  578</a></span>&#160;                <span class="keyword">struct </span><a class="code" href="structrapidjson_1_1_generic_value_1_1_number_1_1_u.html">U</a> {</div>
<div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;                        <span class="keywordtype">unsigned</span> u;</div>
<div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;                        <span class="keywordtype">char</span> padding2[4];</div>
<div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;                }u;</div>
<div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;<span class="preprocessor">#else</span></div>
<div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;<span class="preprocessor"></span>                <span class="keyword">struct </span><a class="code" href="structrapidjson_1_1_generic_value_1_1_number_1_1_i.html">I</a> {</div>
<div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;                        <span class="keywordtype">char</span> padding[4];</div>
<div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;                        <span class="keywordtype">int</span> i;</div>
<div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;                }i;</div>
<div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;                <span class="keyword">struct </span>U {</div>
<div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;                        <span class="keywordtype">char</span> padding2[4];</div>
<div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;                        <span class="keywordtype">unsigned</span> u;</div>
<div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;                }u;</div>
<div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;<span class="preprocessor"></span>                int64_t i64;</div>
<div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;                uint64_t u64;</div>
<div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;                <span class="keywordtype">double</span> d;</div>
<div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;        };      <span class="comment">// 8 bytes</span></div>
<div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;</div>
<div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;        <span class="keyword">struct </span>Object {</div>
<div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;                Member* members;</div>
<div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;                SizeType size;</div>
<div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;                SizeType capacity;</div>
<div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;        };      <span class="comment">// 12 bytes in 32-bit mode, 16 bytes in 64-bit mode</span></div>
<div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;</div>
<div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;        <span class="keyword">struct </span>Array {</div>
<div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;                GenericValue&lt;Encoding, Allocator&gt;* elements;</div>
<div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;                SizeType size;</div>
<div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;                SizeType capacity;</div>
<div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;        };      <span class="comment">// 12 bytes in 32-bit mode, 16 bytes in 64-bit mode</span></div>
<div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;</div>
<div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;        <span class="keyword">union </span>Data {</div>
<div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;                String s;</div>
<div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;                Number n;</div>
<div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;                Object o;</div>
<div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;                Array a;</div>
<div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;        };      <span class="comment">// 12 bytes in 32-bit mode, 16 bytes in 64-bit mode</span></div>
<div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;<span class="comment">        //! Find member by name.</span></div>
<div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;<span class="comment"></span>        Member* FindMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>* name) {</div>
<div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;                RAPIDJSON_ASSERT(name);</div>
<div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;                RAPIDJSON_ASSERT(IsObject());</div>
<div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;</div>
<div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;                SizeType length = internal::StrLen(name);</div>
<div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;</div>
<div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;                Object&amp; o = data_.o;</div>
<div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;                <span class="keywordflow">for</span> (Member* member = o.members; member != data_.o.members + data_.o.size; ++member)</div>
<div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;                        <span class="keywordflow">if</span> (length == member-&gt;name.data_.s.length &amp;&amp; memcmp(member-&gt;name.data_.s.str, name, length * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>)) == 0)</div>
<div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;                                <span class="keywordflow">return</span> member;</div>
<div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;</div>
<div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;                <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;        }</div>
<div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;        <span class="keyword">const</span> Member* FindMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>&amp;<span class="keyword">&gt;</span>(*this).FindMember(name); }</div>
<div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;</div>
<div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;        <span class="comment">// Initialize this value as array with initial data, without calling destructor.</span></div>
<div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;        <span class="keywordtype">void</span> SetArrayRaw(<a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>* values, SizeType count, Allocator&amp; alloctaor) {</div>
<div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;                flags_ = kArrayFlag;</div>
<div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;                data_.a.elements = (<a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>*)alloctaor.Malloc(count * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>));</div>
<div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;                memcpy(data_.a.elements, values, count * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>));</div>
<div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;                data_.a.size = data_.a.capacity = count;</div>
<div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;        }</div>
<div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;<span class="comment">        //! Initialize this value as object with initial data, without calling destructor.</span></div>
<div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;<span class="comment"></span>        <span class="keywordtype">void</span> SetObjectRaw(Member* members, SizeType count, Allocator&amp; alloctaor) {</div>
<div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;                flags_ = kObjectFlag;</div>
<div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;                data_.o.members = (Member*)alloctaor.Malloc(count * <span class="keyword">sizeof</span>(Member));</div>
<div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;                memcpy(data_.o.members, members, count * <span class="keyword">sizeof</span>(Member));</div>
<div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;                data_.o.size = data_.o.capacity = count;</div>
<div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;        }</div>
<div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;<span class="comment">        //! Initialize this value as constant string, without calling destructor.</span></div>
<div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;<span class="comment"></span>        <span class="keywordtype">void</span> SetStringRaw(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>* s, SizeType length) {</div>
<div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;                RAPIDJSON_ASSERT(s != NULL);</div>
<div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;                flags_ = kConstStringFlag;</div>
<div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;                data_.s.str = s;</div>
<div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;                data_.s.length = length;</div>
<div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;        }</div>
<div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;<span class="comment">        //! Initialize this value as copy string with initial data, without calling destructor.</span></div>
<div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;<span class="comment"></span>        <span class="keywordtype">void</span> SetStringRaw(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>* s, SizeType length, Allocator&amp; allocator) {</div>
<div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;                RAPIDJSON_ASSERT(s != NULL);</div>
<div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;                flags_ = kCopyStringFlag;</div>
<div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;                data_.s.str = (<a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a> *)allocator.Malloc((length + 1) * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>));</div>
<div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;                data_.s.length = length;</div>
<div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;                memcpy(const_cast&lt;Ch*&gt;(data_.s.str), s, length * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>));</div>
<div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;                <span class="keyword">const_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>*<span class="keyword">&gt;</span>(data_.s.str)[length] = <span class="charliteral">&#39;\0&#39;</span>;</div>
<div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;        }</div>
<div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;<span class="comment">        //! Assignment without calling destructor</span></div>
<div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;<span class="comment"></span>        <span class="keywordtype">void</span> RawAssign(<a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>&amp; rhs) {</div>
<div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;                memcpy(<span class="keyword">this</span>, &amp;rhs, <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html#a1141a1bdda2b16a38769e9fd170b023a" title="Default constructor creates a null value.">GenericValue</a>));</div>
<div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;                rhs.flags_ = kNullFlag;</div>
<div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;        }</div>
<div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;</div>
<div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;        Data data_;</div>
<div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;        <span class="keywordtype">unsigned</span> flags_;</div>
<div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;};</div>
<div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;<span class="preprocessor">#pragma pack (pop)</span></div>
<div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;<span class="preprocessor"></span><span class="comment"></span></div>
<div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;<span class="comment">//! Value with UTF8 encoding.</span></div>
<div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;<span class="comment"></span><span class="keyword">typedef</span> GenericValue&lt;UTF8&lt;&gt; &gt; Value;</div>
<div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div>
<div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;<span class="comment"></span><span class="comment">// GenericDocument </span></div>
<div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;<span class="comment">//! A document for parsing JSON text as DOM.</span></div>
<div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div>
<div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;<span class="comment">        \implements Handler</span></div>
<div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;<span class="comment">        \tparam Encoding encoding for both parsing and string storage.</span></div>
<div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;<span class="comment">        \tparam Alloactor allocator for allocating memory for the DOM, and the stack during parsing.</span></div>
<div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;<span class="comment">*/</span></div>
<div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator = MemoryPoolAllocator&lt;&gt; &gt;</div>
<div class="line"><a name="l00690"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_document.html">  690</a></span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_document.html" title="A document for parsing JSON text as DOM.">GenericDocument</a> : <span class="keyword">public</span> <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue</a>&lt;Encoding, Allocator&gt; {</div>
<div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00692"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_document.html#a95f6b4a61fa8db5625a241d2a4061c20">  692</a></span>&#160;        <span class="keyword">typedef</span> <span class="keyword">typename</span> Encoding::Ch <a class="code" href="classrapidjson_1_1_generic_document.html#a95f6b4a61fa8db5625a241d2a4061c20" title="Character type derived from Encoding.">Ch</a>;                                               <span class="comment">//!&lt; Character type derived from Encoding.</span></div>
<div class="line"><a name="l00693"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_document.html#aa9528dbbcc30ba9bad5f95d893caa772">  693</a></span>&#160;<span class="comment"></span>        <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html" title="Represents a JSON value. Use Value for UTF8 encoding and default allocator.">GenericValue&lt;Encoding, Allocator&gt;</a> <a class="code" href="classrapidjson_1_1_generic_document.html#aa9528dbbcc30ba9bad5f95d893caa772" title="Value type of the document.">ValueType</a>;    <span class="comment">//!&lt; Value type of the document.</span></div>
<div class="line"><a name="l00694"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_document.html#a570524b93c09643031bd56c16bb69661">  694</a></span>&#160;<span class="comment"></span>        <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_allocator.html" title="Concept for allocating, resizing and freeing memory block.">Allocator</a> <a class="code" href="classrapidjson_1_1_generic_document.html#a570524b93c09643031bd56c16bb69661" title="Allocator type from template parameter.">AllocatorType</a>;                                                <span class="comment">//!&lt; Allocator type from template parameter.</span></div>
<div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;<span class="comment"></span><span class="comment"></span></div>
<div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;<span class="comment">        //! Constructor</span></div>
<div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;<span class="comment"></span><span class="comment">        /*! \param allocator            Optional allocator for allocating stack memory.</span></div>
<div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;<span class="comment">                \param stackCapacity    Initial capacity of stack in bytes.</span></div>
<div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;<span class="comment">        */</span></div>
<div class="line"><a name="l00700"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_document.html#af65cd7883b1734134bc11d461bb7fff6">  700</a></span>&#160;        <a class="code" href="classrapidjson_1_1_generic_document.html#af65cd7883b1734134bc11d461bb7fff6" title="Constructor.">GenericDocument</a>(<a class="code" href="classrapidjson_1_1_allocator.html" title="Concept for allocating, resizing and freeing memory block.">Allocator</a>* allocator = 0, <span class="keywordtype">size_t</span> stackCapacity = kDefaultStackCapacity) : stack_(allocator, stackCapacity), parseError_(0), errorOffset_(0) {}</div>
<div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;<span class="comment">        //! Parse JSON text from an input stream.</span></div>
<div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;<span class="comment"></span><span class="comment">        /*! \tparam parseFlags Combination of ParseFlag.</span></div>
<div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;<span class="comment">                \param stream Input stream to be parsed.</span></div>
<div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;<span class="comment">                \return The document itself for fluent API.</span></div>
<div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;<span class="comment">        */</span></div>
<div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;        <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> Stream&gt;</div>
<div class="line"><a name="l00708"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_document.html#ae1d75a563e9554055c05c35e203376e8">  708</a></span>&#160;        <a class="code" href="classrapidjson_1_1_generic_document.html" title="A document for parsing JSON text as DOM.">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#ae1d75a563e9554055c05c35e203376e8" title="Parse JSON text from an input stream.">ParseStream</a>(<a class="code" href="classrapidjson_1_1_stream.html" title="Concept for reading and writing characters.">Stream</a>&amp; stream) {</div>
<div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;                ValueType::SetNull(); <span class="comment">// Remove existing root if exist</span></div>
<div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;                <a class="code" href="classrapidjson_1_1_generic_reader.html" title="SAX-style JSON parser. Use Reader for UTF8 encoding and default allocator.">GenericReader&lt;Encoding, Allocator&gt;</a> reader;</div>
<div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;                <span class="keywordflow">if</span> (reader.template Parse&lt;parseFlags&gt;(stream, *<span class="keyword">this</span>)) {</div>
<div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;                        RAPIDJSON_ASSERT(stack_.GetSize() == <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_document.html#aa9528dbbcc30ba9bad5f95d893caa772" title="Value type of the document.">ValueType</a>)); <span class="comment">// Got one and only one root object</span></div>
<div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;                        this-&gt;RawAssign(*stack_.template Pop&lt;ValueType&gt;(1));    <span class="comment">// Add this-&gt; to prevent issue 13.</span></div>
<div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;                        parseError_ = 0;</div>
<div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;                        errorOffset_ = 0;</div>
<div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;                }</div>
<div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;                <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;                        parseError_ = reader.GetParseError();</div>
<div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;                        errorOffset_ = reader.GetErrorOffset();</div>
<div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;                        ClearStack();</div>
<div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;                }</div>
<div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;                <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;        }</div>
<div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;<span class="comment">        //! Parse JSON text from a mutable string.</span></div>
<div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;<span class="comment"></span><span class="comment">        /*! \tparam parseFlags Combination of ParseFlag.</span></div>
<div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;<span class="comment">                \param str Mutable zero-terminated string to be parsed.</span></div>
<div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;<span class="comment">                \return The document itself for fluent API.</span></div>
<div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;<span class="comment">        */</span></div>
<div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;        <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags&gt;</div>
<div class="line"><a name="l00731"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_document.html#a2fd2ff8ec45d5d074b899a231c337e52">  731</a></span>&#160;        <a class="code" href="classrapidjson_1_1_generic_document.html" title="A document for parsing JSON text as DOM.">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#a2fd2ff8ec45d5d074b899a231c337e52" title="Parse JSON text from a mutable string.">ParseInsitu</a>(<a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>* str) {</div>
<div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;                <a class="code" href="structrapidjson_1_1_generic_insitu_string_stream.html" title="A read-write string stream.">GenericInsituStringStream&lt;Encoding&gt;</a> s(str);</div>
<div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;                <span class="keywordflow">return</span> ParseStream&lt;parseFlags | kParseInsituFlag&gt;(s);</div>
<div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;        }</div>
<div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;<span class="comment">        //! Parse JSON text from a read-only string.</span></div>
<div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;<span class="comment"></span><span class="comment">        /*! \tparam parseFlags Combination of ParseFlag (must not contain kParseInsituFlag).</span></div>
<div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;<span class="comment">                \param str Read-only zero-terminated string to be parsed.</span></div>
<div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;<span class="comment">        */</span></div>
<div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;        <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags&gt;</div>
<div class="line"><a name="l00741"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_document.html#a751f866d4d93710f23d649f9ed341ed7">  741</a></span>&#160;        <a class="code" href="classrapidjson_1_1_generic_document.html" title="A document for parsing JSON text as DOM.">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#a751f866d4d93710f23d649f9ed341ed7" title="Parse JSON text from a read-only string.">Parse</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4" title="Character type derived from Encoding.">Ch</a>* str) {</div>
<div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;                RAPIDJSON_ASSERT(!(parseFlags &amp; kParseInsituFlag));</div>
<div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;                <a class="code" href="structrapidjson_1_1_generic_string_stream.html" title="Read-only string stream.">GenericStringStream&lt;Encoding&gt;</a> s(str);</div>
<div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;                <span class="keywordflow">return</span> ParseStream&lt;parseFlags&gt;(s);</div>
<div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;        }</div>
<div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;<span class="comment">        //! Whether a parse error was occured in the last parsing.</span></div>
<div class="line"><a name="l00748"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_document.html#ab94b84bd065bc09f7ebdc9ac5cce4354">  748</a></span>&#160;<span class="comment"></span>        <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_document.html#ab94b84bd065bc09f7ebdc9ac5cce4354" title="Whether a parse error was occured in the last parsing.">HasParseError</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> parseError_ != 0; }</div>
<div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;<span class="comment">        //! Get the message of parsing error.</span></div>
<div class="line"><a name="l00751"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_document.html#a3d79b04520f0af52d00283fb195db1f9">  751</a></span>&#160;<span class="comment"></span>        <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="classrapidjson_1_1_generic_document.html#a3d79b04520f0af52d00283fb195db1f9" title="Get the message of parsing error.">GetParseError</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> parseError_; }</div>
<div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;<span class="comment">        //! Get the offset in character of the parsing error.</span></div>
<div class="line"><a name="l00754"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_document.html#a9861f690f4320006aebde1a27e6ecb9b">  754</a></span>&#160;<span class="comment"></span>        <span class="keywordtype">size_t</span> <a class="code" href="classrapidjson_1_1_generic_document.html#a9861f690f4320006aebde1a27e6ecb9b" title="Get the offset in character of the parsing error.">GetErrorOffset</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> errorOffset_; }</div>
<div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;<span class="comment">        //! Get the allocator of this document.</span></div>
<div class="line"><a name="l00757"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_document.html#ab7c160e20a34a99a8576fc5d69c2def4">  757</a></span>&#160;<span class="comment"></span>        <a class="code" href="classrapidjson_1_1_allocator.html" title="Concept for allocating, resizing and freeing memory block.">Allocator</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#ab7c160e20a34a99a8576fc5d69c2def4" title="Get the allocator of this document.">GetAllocator</a>() {     <span class="keywordflow">return</span> stack_.GetAllocator(); }</div>
<div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;<span class="comment">        //! Get the capacity of stack in bytes.</span></div>
<div class="line"><a name="l00760"></a><span class="lineno"><a class="code" href="classrapidjson_1_1_generic_document.html#a89b8e2053fd7dd03291ad0bbecff084d">  760</a></span>&#160;<span class="comment"></span>        <span class="keywordtype">size_t</span> <a class="code" href="classrapidjson_1_1_generic_document.html#a89b8e2053fd7dd03291ad0bbecff084d" title="Get the capacity of stack in bytes.">GetStackCapacity</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> stack_.GetCapacity(); }</div>
<div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;</div>
<div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;        <span class="comment">// Prohibit assignment</span></div>
<div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_document.html" title="A document for parsing JSON text as DOM.">GenericDocument</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_document.html" title="A document for parsing JSON text as DOM.">GenericDocument</a>&amp;);</div>
<div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;</div>
<div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;        <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_reader.html" title="SAX-style JSON parser. Use Reader for UTF8 encoding and default allocator.">GenericReader</a>&lt;<a class="code" href="classrapidjson_1_1_encoding.html" title="Concept for encoding of Unicode characters.">Encoding</a>, <a class="code" href="classrapidjson_1_1_allocator.html" title="Concept for allocating, resizing and freeing memory block.">Allocator</a>&gt;;        <span class="comment">// for Reader to call the following private handler functions</span></div>
<div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;</div>
<div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;        <span class="comment">// Implementation of Handler</span></div>
<div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;        <span class="keywordtype">void</span> Null()     { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) <a class="code" href="classrapidjson_1_1_generic_document.html#aa9528dbbcc30ba9bad5f95d893caa772" title="Value type of the document.">ValueType</a>(); }</div>
<div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;        <span class="keywordtype">void</span> Bool(<span class="keywordtype">bool</span> b) { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) <a class="code" href="classrapidjson_1_1_generic_document.html#aa9528dbbcc30ba9bad5f95d893caa772" title="Value type of the document.">ValueType</a>(b); }</div>
<div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;        <span class="keywordtype">void</span> Int(<span class="keywordtype">int</span> i) { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) <a class="code" href="classrapidjson_1_1_generic_document.html#aa9528dbbcc30ba9bad5f95d893caa772" title="Value type of the document.">ValueType</a>(i); }</div>
<div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;        <span class="keywordtype">void</span> Uint(<span class="keywordtype">unsigned</span> i) { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) <a class="code" href="classrapidjson_1_1_generic_document.html#aa9528dbbcc30ba9bad5f95d893caa772" title="Value type of the document.">ValueType</a>(i); }</div>
<div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;        <span class="keywordtype">void</span> Int64(int64_t i) { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) <a class="code" href="classrapidjson_1_1_generic_document.html#aa9528dbbcc30ba9bad5f95d893caa772" title="Value type of the document.">ValueType</a>(i); }</div>
<div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;        <span class="keywordtype">void</span> Uint64(uint64_t i) { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) <a class="code" href="classrapidjson_1_1_generic_document.html#aa9528dbbcc30ba9bad5f95d893caa772" title="Value type of the document.">ValueType</a>(i); }</div>
<div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;        <span class="keywordtype">void</span> Double(<span class="keywordtype">double</span> d) { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) <a class="code" href="classrapidjson_1_1_generic_document.html#aa9528dbbcc30ba9bad5f95d893caa772" title="Value type of the document.">ValueType</a>(d); }</div>
<div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;</div>
<div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;        <span class="keywordtype">void</span> String(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_document.html#a95f6b4a61fa8db5625a241d2a4061c20" title="Character type derived from Encoding.">Ch</a>* str, SizeType length, <span class="keywordtype">bool</span> copy) { </div>
<div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;                <span class="keywordflow">if</span> (copy) </div>
<div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;                        <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) <a class="code" href="classrapidjson_1_1_generic_document.html#aa9528dbbcc30ba9bad5f95d893caa772" title="Value type of the document.">ValueType</a>(str, length, <a class="code" href="classrapidjson_1_1_generic_document.html#ab7c160e20a34a99a8576fc5d69c2def4" title="Get the allocator of this document.">GetAllocator</a>());</div>
<div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;                <span class="keywordflow">else</span></div>
<div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;                        <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) <a class="code" href="classrapidjson_1_1_generic_document.html#aa9528dbbcc30ba9bad5f95d893caa772" title="Value type of the document.">ValueType</a>(str, length);</div>
<div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;        }</div>
<div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;</div>
<div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;        <span class="keywordtype">void</span> StartObject() { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) <a class="code" href="classrapidjson_1_1_generic_document.html#aa9528dbbcc30ba9bad5f95d893caa772" title="Value type of the document.">ValueType</a>(kObjectType); }</div>
<div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;        </div>
<div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;        <span class="keywordtype">void</span> EndObject(SizeType memberCount) {</div>
<div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;                <span class="keyword">typename</span> ValueType::Member* members = stack_.template Pop&lt;typename ValueType::Member&gt;(memberCount);</div>
<div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;                stack_.template Top&lt;ValueType&gt;()-&gt;SetObjectRaw(members, (SizeType)memberCount, <a class="code" href="classrapidjson_1_1_generic_document.html#ab7c160e20a34a99a8576fc5d69c2def4" title="Get the allocator of this document.">GetAllocator</a>());</div>
<div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;        }</div>
<div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;</div>
<div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;        <span class="keywordtype">void</span> StartArray() { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) <a class="code" href="classrapidjson_1_1_generic_document.html#aa9528dbbcc30ba9bad5f95d893caa772" title="Value type of the document.">ValueType</a>(kArrayType); }</div>
<div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;        </div>
<div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;        <span class="keywordtype">void</span> EndArray(SizeType elementCount) {</div>
<div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;                <a class="code" href="classrapidjson_1_1_generic_document.html#aa9528dbbcc30ba9bad5f95d893caa772" title="Value type of the document.">ValueType</a>* elements = stack_.template Pop&lt;ValueType&gt;(elementCount);</div>
<div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;                stack_.template Top&lt;ValueType&gt;()-&gt;SetArrayRaw(elements, elementCount, <a class="code" href="classrapidjson_1_1_generic_document.html#ab7c160e20a34a99a8576fc5d69c2def4" title="Get the allocator of this document.">GetAllocator</a>());</div>
<div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;        }</div>
<div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;</div>
<div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;        <span class="keywordtype">void</span> ClearStack() {</div>
<div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;                <span class="keywordflow">if</span> (Allocator::kNeedFree)</div>
<div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;                        <span class="keywordflow">while</span> (stack_.GetSize() &gt; 0)    <span class="comment">// Here assumes all elements in stack array are GenericValue (Member is actually 2 GenericValue objects)</span></div>
<div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;                                (stack_.template Pop&lt;ValueType&gt;(1))-&gt;~<a class="code" href="classrapidjson_1_1_generic_document.html#aa9528dbbcc30ba9bad5f95d893caa772" title="Value type of the document.">ValueType</a>();</div>
<div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;                <span class="keywordflow">else</span></div>
<div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;                        stack_.Clear();</div>
<div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;        }</div>
<div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;</div>
<div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160;        <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> kDefaultStackCapacity = 1024;</div>
<div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;        internal::Stack&lt;Allocator&gt; stack_;</div>
<div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span>* parseError_;</div>
<div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160;        <span class="keywordtype">size_t</span> errorOffset_;</div>
<div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;};</div>
<div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;</div>
<div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;<span class="keyword">typedef</span> GenericDocument&lt;UTF8&lt;&gt; &gt; Document;</div>
<div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;</div>
<div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;} <span class="comment">// namespace rapidjson</span></div>
<div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;</div>
<div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;<span class="preprocessor">#ifdef _MSC_VER</span></div>
<div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#pragma warning(pop)</span></div>
<div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_DOCUMENT_H_</span></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Nov 16 2012 21:08:20 for rapidjson by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</small></address>
</body>
</html>
